﻿#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    receiver = new QUdpSocket(this);
    receiver->bind(45454,QUdpSocket::ShareAddress);//将receiver绑定到45454端口，这个端口就是上面发送端设置的端口，二者必须一样才能保证接收到数据报。
    connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
}

Widget::~Widget()
{
    delete ui;
}


/******************************************************************************************************
    主要用于接收来自udpSender的数据报，所以需要和udpSender同时使用。
    注意事项：第一次运行该程序时，系统可能会提示警告，我们选择“解除阻止”。 注意，如果是在linux下，你可能还需要关闭防火墙。
********************************************************************************************************/
void Widget::processPendingDatagram() //处理等待的数据报
{
    while(receiver->hasPendingDatagrams())  //拥有等待的数据报
    {
        QByteArray datagram; //拥于存放接收的数据报
        datagram.resize(receiver->pendingDatagramSize());//让datagram的大小为等待处理的数据报的大小，这样才能接收到完整的数据
        receiver->readDatagram(datagram.data(),datagram.size());//接收数据报，将其存放到datagram中
        ui->label->setText(datagram);//将数据报内容显示出来
    }
}
